import moment from 'moment';
/**
 * @Title: 时间处理
 * @Description: 工具索引
 *     2、formatAddTime 时间 加法 并 格式化时间
 *     3、formatSubtractTime 时间 减法 并 格式化时间
 */

/**
 * @param time 需要格式化时间  默认当前时间
 * @param norms 格式化规则 默认 YYYY-MM-DD
 */
export const formatTime = function(time = new Date(), norms = 'YYYY-MM-DD') {
  if (time != null) {
    if (time.toString().indexOf('1900') !== -1) {
      return '';
    } else {
      return time && moment(time).format(norms) || '';
    }
  }
};
export const formatTimeMin = function(time = new Date(), norms = 'YYYY-MM-DD HH:mm:ss') {
  return time && moment(time).format(norms) || '';
};
export const formatTimeMax = function(time = new Date(), norms = 'YYYY-MM-DD 23:59:59') {
  return time && moment(time).format(norms) || '';
};
// 几天后，或者几天前
export const day = function(addNum = 1, norms = 'YYYY-MM-DD') {
  return moment().day(addNum).format(norms) || '';
};

// 几天后，或者几天前
export const firstDay = function(norms = 'YYYY-MM-DD') {
  return moment().startOf('month').format(norms) || ''
};
/**
 * @Title: 2、时间 加法 并 格式化时间
 *
 * @param time 需要格式化时间  默认当前时间
 * @param norms 格式化规则 默认 YYYY-MM-DD
 * @param addNum 加数
 * @param addNorms 加法规则 默认 'days'
 */
export const formatAddTime = function(time = new Date(), addNum = 1, addNorms = 'days', norms = 'YYYY-MM-DD') {
  return time && moment(time).add(addNum, addNorms).format(norms) || '';
};

/**
 * @Title: 3、时间 减法 并 格式化时间
 *
 * @param time 需要格式化时间  默认当前时间
 * @param norms 格式化规则 默认 YYYY-MM-DD
 * @param addNum 减数
 * @param addNorms 减法规则 默认 'days'
 *
 * @Description:
 */
export const formatSubtractTime = function(addNum = 1, addNorms = 'days', time = new Date(), norms = 'YYYY-MM-DD') {
  return time && moment(time).subtract(addNum, addNorms).format(norms) || '';
};

// 用JS将毫秒转化成天时分秒的时间格式
export const formatDuring = function(mss) {
  var days = parseInt(mss / (1000 * 60 * 60 * 24));
  var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
  return days + '天' + hours + '小时' + minutes + '分钟';
};

/**
 * .....多久之前
 * @param {*} 之前的时间
 * @returns 系统时间到之前指定时间的距离值
 */
// 把目标日期转成多久之前通用函数
export const targetDate = targetDate => {
  return moment(targetDate).fromNow()
};

// formatDates
export function formatDates(date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'H+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  };
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + '';
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
    }
  }
  return fmt;
}

function padLeftZero(str) {
  return ('00' + str).substr(str.length);
}
